package com.observer.inner_api.observer_object;


import com.observer.inner_api.WeatherData;
import java.util.Observable;
import java.util.Observer;

/**
 * @ClassName: CurrentConditionsDisplay
 * @Author: ZhangYue26
 * @Description: 定义观察者对象：观察者对象，在初始化构造的时候，注册主题(成为观察主题的对象)
 * @Date: 2020-09-17
 */
public class CurrentConditionsDisplay implements Observer {

    private float temperature;//温度
    private float humidity;//湿度
    private float airpressure;//气压
    private Observable observable;//被观察者对象

    /**
     * @Description 在新建观察者模式时需要将该观察者添加至被观察者中的观察者List中
     * @author ZhangYue26
     * @date 2020/9/17
     * @param [observable]
     * @return
     **/
    public CurrentConditionsDisplay(Observable observable) {
        this.observable = observable;
        observable.addObserver(this);//将当前对象(观察者)添加到被观察者的观察者List中
    }

    public void display() {
        System.out.println("CurrentConditionsDisplay == 气温:" + this.temperature + "\t" + "温度:" + this.humidity + "\t" + "气压:" + this.airpressure);
    }

    /**
      * @Description 通知，在被观察者中调用通知所有观察者方法会调用此方法
      * @author ZhangYue26
      * @date 2020/9/17
      * @param [o, arg]
      * @return void
      **/
    @Override
    public void update(Observable o, Object arg) {
        if (o instanceof WeatherData) {
            this.temperature = ((WeatherData) o).getTemperature();
            this.humidity = ((WeatherData) o).getHumidity();
            this.airpressure = ((WeatherData) o).getAirpressure();
            this.display();
        }
    }
}
